////////////////////////////////////////////////////////////////////////////////

#ifndef _SHAPES_H_
#define _SHAPES_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _PHYSICALTYPES_H_
#include "physicaltypes.h"
#endif

#include <vector>

////////////////////////////////////////////////////////////////////////////////


/** Physical engine namespace */
namespace PE
{
    /** Base class for shapes */
    struct Shape
    {
        virtual ~Shape() {}
        virtual bool IsCircle() {return false;}
        virtual bool IsRect() {return false;}
        virtual bool IsLine() {return false;}
        virtual bool IsPolygon() {return false;}
    };


    struct Circle : public Shape
    {
        double m_Radius;
        virtual bool IsCircle() {return true;}
    };


    struct Rect : public Shape
    {
        double m_Width;
        double m_Height;
        virtual bool IsRect() {return true;}
    };


    struct Line : public Shape
    {
        Point m_Start;
        Point m_End;
        virtual bool IsLine() {return true;}
    };


    struct Polygon : public Shape
    {
        std::vector<Point> m_Points;
        virtual bool IsPolygon() {return true;}
    };
    

////////////////////////////////////////////////////////////////////////////////

};

////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////
